package org.jsola.contract.dao;

import org.apache.ibatis.annotations.Param;
import org.jsola.contract.entity.ContractDO;
import org.jsola.contract.query.ContractExportQuery;
import org.jsola.contract.query.ContractQuery;
import org.jsola.core.Page;
import org.jsola.orm.mapper.IJsolaMapper;
import org.springframework.stereotype.Repository;

import java.util.ArrayList;
import java.util.List;


/**
 * 合同
 *
 * @author JanusMix
 */
@Repository("contractContractDAO")
public interface IContractDAO extends IJsolaMapper<ContractDO> {


    /**
     * 查询【合同】详情
     *
     * @param contractId 主键id
     * @param siteId 站点id
     * @return DO
     */
    ContractDO findById(@Param("id") Long contractId, @Param("siteId") String siteId);

    /**
     * 查询【合同】列表行数
     *
     * @param contractQuery query对象
     * @param siteId 站点id
     * @return 返回行数
     */
     int findCountByQuery(@Param("query")ContractQuery contractQuery, @Param("siteId") String siteId);

    /**
     * 查询【合同】列表
     *
     * @param contractQuery query对象
     * @param siteId 站点id
     * @return DO列表
     */
    List<ContractDO> findListByQuery(@Param("query")ContractQuery contractQuery, @Param("siteId") String siteId);

    /**
     * 查询【合同】列表(不返回content（合同富文本）列)
     *
     * @param contractQuery query对象
     * @param siteId 站点id
     * @return DO列表
     */
    List<ContractDO> findListNoContentByQuery(@Param("query")ContractQuery contractQuery, @Param("siteId") String siteId);

    /**
     * 查询【合同】分页列表
     *
     * @param contractQuery query对象
     * @param startIndex 起始位置
     * @param pageSize 每页数量
     * @param siteId 站点id
     * @return DO列表
     */
    List<ContractDO> findPageListByQuery(@Param("query")ContractQuery contractQuery, @Param("startIndex") Integer startIndex,
            @Param("pageSize") Integer pageSize, @Param("siteId") String siteId);

    /**
     * 查询分页
     *
     * @param contractQuery query对象
     * @param siteId 站点id
     * @return DO分页
     */
    default Page<ContractDO> findPageByQuery(ContractQuery contractQuery, String siteId) {
        int count = this.findCountByQuery(contractQuery, siteId);
        List<ContractDO> list;
        if (count > 0) {
            list = this.findPageListByQuery(contractQuery, (contractQuery.getPageNo() - 1) * contractQuery.getPageSize(),
                    contractQuery.getPageSize(), siteId);
        } else {
            list = new ArrayList<>();
        }
        return new Page<>(list, contractQuery.getPageNo(), contractQuery.getPageSize(), count);
    }

    /**
     * 查询合同列表
     *
     * @param contractExportQuery 查询对象
     * @param siteId              站点id
     * @return 合同列表
     */
    List<ContractDO> findByQuery(@Param("query") ContractExportQuery contractExportQuery
            , @Param("siteId") String siteId);
}

